package cn.bearspark.happening.provider.service;

import cn.bearspark.happening.dto.booklive.CancelReqDTO;
import cn.bearspark.happening.dto.booklive.StateReqDTO;
import cn.bearspark.happening.dto.happening.BookLiveInfo4Publish;
import cn.bearspark.happening.provider.service.bo.BookLiveBO;

import java.util.List;
import java.util.Map;

/**
 * 动态的预约直播模块的服务接口
 *
 * @author f
 */
public interface BookLiveService {

    /**
     * 发布直播预约
     *
     * @param bookLiveInfo 发布直播预约的数据
     * @param bookLiveId   直播预约的 id，同时也是动态的 id
     * @param anchorId     主播的用户 id
     */
    void publish(BookLiveInfo4Publish bookLiveInfo, long bookLiveId, long anchorId);

    /**
     * 撤销直播预约
     *
     * @param cancelReqDTO 撤销直播预约的请求的数据传输对象
     */
    void cancel(CancelReqDTO cancelReqDTO);

    /**
     * 修改预约直播状态
     *
     * @param stateReqDTO 修改预约直播状态的请求的数据传输对象
     */
    void state(StateReqDTO stateReqDTO);

    /**
     * 查询预约直播的业务数据
     *
     * @param bookLiveIdList 待查询的预约直播的 id 集合
     * @param userId         查询预约直播数据的用户的用户 id
     * @return 预约直播的业务数据映射，key：预约直播的 id，value：预约直播的业务数据
     */
    Map<Long, BookLiveBO> mapBookLiveInfo(List<Long> bookLiveIdList, long userId);

    /**
     * 查询指定预约直播的业务数据
     *
     * @param bookLiveId 待查询的预约直播的 id
     * @param userId     获取信息的用户 id
     * @return 指定预约直播的业务数据
     */
    BookLiveBO getBookLiveInfo(Long bookLiveId, long userId);

    /**
     * 删除指定的预约直播信息
     *
     * @param bookLiveId 指定的预约直播 id
     */
    void delete(long bookLiveId);
}
